package com.wh.wisdomsite.xbox.core.interceptor;

import com.wh.wisdomsite.xbox.common.XboxRequestContext;
import com.wh.wisdomsite.xbox.common.XboxRequest;
import com.wh.wisdomsite.xbox.core.impl.DefaultXboxRequestContext;


/**
 * 配置拦截器接口Interceptor
 * @Package com.wh.wisdomsite.xbox.common
 * @author 谢泽鹏
 * @date 2014年10月8日 下午4:02:14
 * @Copyright 个人版权所有
 * @Company 贵州万华科技有限公司Copyright (c) 2014
 * @version V1.0
 */
public interface Interceptor {


    /**
     * 在调用服务之前拦截
     * 如果在方法中往{@link DefaultXboxRequestContext}设置了{@link XboxRequest}（相当于已经产生了响应了）,
     * 所以服务将直接返回，不往下继续执行，反之服务会继续往下执行直到返回响应
     * @param xboxRequestContext
     */
    void beforeService(XboxRequestContext xboxRequestContext);


    /**
     * 在调用服务之后拦截
     * @param xboxRequestContext
     */
    void beforeResponse(XboxRequestContext xboxRequestContext);


    /**
     * 该方法返回true时才实施拦截，否则不拦截。可以通过{@link DefaultXboxRequestContext}
     * @param xboxRequestContext
     * @return
     */
    boolean isMatch(XboxRequestContext xboxRequestContext);


    /**
     * 执行的顺序，整数值越小的越早执行
     * @return
     */
    int getOrder();
}
